//
//  RDConfigInfo.h
//  RDelivery
//
//  Created by selmerzhang on 2021/8/5.
//  Copyright © 2021 Tencent. All rights reserved.
//

#ifndef RDConfigInfo_h
#define RDConfigInfo_h

#import "RDConfigServerJsonModel.h"

@class RDABTestInfo;

NS_ASSUME_NONNULL_BEGIN

/// 配置信息类
/// 在此类下新增自定义类的属性，需要注意 RDConfigStorage 等处使用 NSKeyedUnarchiver unarchive 时：
/// 需要声明新增的自定义 class 名字，才能 unarchive 成功
@interface RDConfigInfo : NSObject <NSSecureCoding>

/// 初始化配置信息
/// @param key 配置key
/// @param value 配置内容
/// @param abTestInfo 实验信息
/// @param hitSubTaskId 命中的子任务Id
- (instancetype)initWithKey:(NSString *)key
                      value:(NSString * _Nullable)value
               switchStatus:(RDConfigSwitchState)switchStatus
                 abTestInfo:(RDABTestInfo * _Nullable)abTestInfo
               hitSubTaskId:(int64_t)hitSubTaskId;

/// 获取配置开关值
/// @param defaultValue 默认开关值，如果开关未定义则返回默认值
- (BOOL)isSwitchOnDefault:(BOOL)defaultValue;

/// 配置项的key
@property (nonatomic, copy, readonly) NSString *key;
/// 配置内容
@property (nonatomic, copy, readonly) NSString *configValue;

/// 当前配置对应的实验信息
@property (nonatomic, strong, nullable) RDABTestInfo *abTestInfo;

/// 获取BOOL类型值
@property (nonatomic, assign, readonly) BOOL boolValue;

/// 获取NSInteger类型值
@property (nonatomic, assign, readonly) NSInteger rd_intValue;

/// 获取NSUInteger类型值
@property (nonatomic, assign, readonly) NSUInteger uintValue;

/// 获取float类型值
@property (nonatomic, assign, readonly) float floatValue;

/// 获取double类型值
@property (nonatomic, assign, readonly) double doubleValue;

/// 获取NSString类型值
@property (nonatomic, copy, readonly, nullable) NSString *stringValue;

/// 获取NSArray类型值
@property (nonatomic, copy, readonly, nullable) NSArray *arrayValue;

/// 获取NSDictionary类型值
@property (nonatomic, copy, readonly, nullable) NSDictionary *mapValue;

/// 获取NSData类型值
@property (nonatomic, copy, readonly, nullable) NSData *dataValue;

/// 命中的子任务Id
@property(nonatomic, assign, readonly) int64_t hitSubTaskId;

/// 【TAB使用，兼容TAB】
/// 配置项命中的conditionid，上报统计使用，0为默认值
@property (nonatomic, assign) int conditionId;

// 配置类型【 Shiply 预留字段，已经用于兼容 Toggle DataSet 的类型】
@property(nonatomic, assign) RDConfigServerValueType config_value_type;

@end

NS_ASSUME_NONNULL_END


#endif /* RDConfigInfo_h */
